package cn.com.anypay.manager.lakala.config;

import cn.com.anypay.manager.lakala.config.ApiEndpointConfig;
import cn.com.anypay.manager.lakala.config.BasePaymentConfig;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;

/**
 * 拉卡拉支付平台统一配置
 * 整合了认证配置和API配置
 *
 * @author Claude
 * @date 2024-01-15
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Configuration
@ConfigurationProperties(prefix = "lakala")
public class LakalaConfig extends BasePaymentConfig {

    /**
     * API端点配置
     */
    private ApiEndpointConfig api = new ApiEndpointConfig();

    /**
     * 拉卡拉特有配置
     */
    private String lklSerialNo;  // 拉卡拉证书序列号（Lklapi-Serial请求头）
    private String terminalNo = "00000001";  // 终端号
    private Integer defaultOrgId = 1;  // 默认机构号

    /**
     * V3版本新增字段
     */
    private String merchantNo;  // 商户号
    private String sm4Key;  // 国密4（SM4Key）

    /**
     * appId格式说明：
     * - 格式：OP + 8位数字
     * - 示例：OP00000003
     * - 长度：10个字符
     * - 由拉卡拉开放平台分配
     */

    /**
     * 初始化API端点配置
     */
    @PostConstruct
    public void init() {
        // 设置基础URL
        api.setTestBaseUrl("https://test.wsmsd.cn/sit");
        api.setProdBaseUrl("https://s2.lakala.com");

        // 注册API端点
        api.addEndpoint("contractApply", "/api/v3/mms/open_api/ec/apply");
        api.addEndpoint("contractQuery", "/api/v3/mms/open_api/ec/query");
        api.addEndpoint("contractDownload", "/api/v3/mms/open_api/ec/download");
        api.addEndpoint("merchantApply", "/api/v3/mms/open_api/merchant/apply");
        api.addEndpoint("merchantQuery", "/api/v3/mms/open_api/merchant/query");
        api.addEndpoint("transactionNotify", "/api/v3/mms/open_api/transaction/notify");
    }

    /**
     * 覆盖父类方法，获取当前环境的基础URL
     */
    @Override
    public String getBaseUrl() {
        return api.getBaseUrl(getEnvironment());
    }

    // 便捷方法：获取常用API的完整URL

    /**
     * 获取完整的电子合同申请URL
     */
    public String getContractApplyUrl() {
        return api.getFullUrl(getEnvironment(), "contractApply");
    }

    /**
     * 获取完整的电子合同查询URL
     */
    public String getContractQueryUrl() {
        return api.getFullUrl(getEnvironment(), "contractQuery");
    }

    /**
     * 获取完整的电子合同下载URL
     */
    public String getContractDownloadUrl() {
        return api.getFullUrl(getEnvironment(), "contractDownload");
    }

    /**
     * 获取完整的商户申请URL
     */
    public String getMerchantApplyUrl() {
        return api.getFullUrl(getEnvironment(), "merchantApply");
    }

    /**
     * 获取完整的商户查询URL
     */
    public String getMerchantQueryUrl() {
        return api.getFullUrl(getEnvironment(), "merchantQuery");
    }

    /**
     * 获取交易通知URL
     */
    public String getTransactionNotifyUrl() {
        return api.getFullUrl(getEnvironment(), "transactionNotify");
    }

    // 兼容旧版本的方法
    @Deprecated
    public boolean isDebug() {
        return isDebugMode();
    }
}
